我正在嘗試為 seo url 創建一個 htaccess,我創建了我的 htaccess,所有 url 都可以正常作業,排除帶有引數的子檔案夾,它們重定向到 sitefolder。
sitefolder是我的根所有檔案都在那里。
示例:網址應如下所示:
http://localhost/sitefolder/subcat/39/web-hosting
http://localhost/sitefolder/profile/1/username
在 htaccess 中是這樣的:
RewriteRule ^subcat/(.*)/([a-zA-Z0-9_-] )$ subcat.php?q=$1&slug=$2 [L,NC]
RewriteRule ^profile/(.*)/([a-zA-Z0-9_-] )$ show_profile.php?q=$1&slug=$2 [L,NC]
第一個引數是 id,第二個引數是 slug,但兩個 url 都沒有轉到 url。
這是我所有的 htacces 代碼:
Options FollowSymLinks -MultiViews
RewriteEngine on
RewriteRule ^contact-us contact-us.php [L,NC]
RewriteRule ^login login.php [L,NC]
RewriteRule ^register register.php [L,NC]
RewriteRule ^search search.php [L,NC]
RewriteRule ^about-us about-us.php [L,NC]
RewriteRule ^(.*)/([a-zA-Z0-9_-] )$ detail.php?q=$1&slug=$2 [L,NC]
RewriteRule ^cats categories.php [L,NC]
RewriteRule ^subcat/(.*)/([a-zA-Z0-9_-] )$ subcat.php?q=$1&slug=$2 [L,NC]
RewriteRule ^profile/(.*)/([a-zA-Z0-9_-] )$ show_profile.php?q=$1&slug=$2 [L,NC]
這就是我獲取引數的方式subcat.php,我不會重定向到錯誤索引,所以我不認為這是因為 php:
if(!empty($_GET['slug']) AND !empty($_GET['q'])) {
$slug = $_GET['slug'];
$pid = is_numeric($_GET['q']);
$userQuery = $handler->getPosts("SELECT * FROM categories WHERE catId = ?", [$pid])->fetchAll();
if($userQuery) {
foreach($userQuery as $user){
$catid = intval($user['catId']);
$cat_title = htmlspecialchars($user['catName']);
$cat_seo_url = htmlspecialchars($user['cat_seo_url']);
$cat_descriptions = htmlspecialchars($user['cat_desc']);
$cat_keywords = htmlspecialchars($user['cat_keys']);
$cat_created = htmlspecialchars($user['cat_created_at']);
$cat_img = htmlspecialchars($user['cat_img']);
}
}else{
echo "Something went wrong while execute query.";
exit();
}
}else{
echo "Something went wrong with parameters";
exit();
}
uj5u.com熱心網友回復:
如果subcat.php被呼叫(正如您在評論中所說的那樣),那么.htaccess. 但是index.php您發布的任何代碼中都沒有重定向。
但是,這行似乎有一個錯誤:
$pid = is_numeric($_GET['q']);
is_numeric()只是測驗引數是否為數字并回傳一個布林值,它不回傳該變數的數值,這似乎是您所期望的。因此,無論q.
您可能需要這樣的東西:
$pid = is_numeric($_GET['q']) ? (int)$_GET['q'] : 0;
但是您需要首先驗證這些 URL 引數(即$_GETvars)是否已傳遞,否則,您的腳本將發出 E_NOTICE 訊息。
更新:
RewriteRule與您的指令有沖突:
RewriteRule ^(.*)/([a-zA-Z0-9_-] )$ detail.php?q=$1&slug=$2 [L,NC] RewriteRule ^cats categories.php [L,NC] RewriteRule ^subcat/(.*)/([a-zA-Z0-9_-] )$ subcat.php?q=$1&slug=$2 [L,NC] RewriteRule ^profile/(.*)/([a-zA-Z0-9_-] )$ show_profile.php?q=$1&slug=$2 [L,NC]
當您請求http://localhost/sitefolder/subcat/38/web-design時,它將被此處的第一條規則捕獲,該規則將請求重寫為detail.php?q=subcat/39&slug=web-design,而不是subcat.php您所期望的。
您需要更改這些規則的順序和/或使正則運算式更具體以避免沖突。例如。如果q應該是一個數字 id,那么只匹配一個數值 ( \d ),而不是字面上的任何( .*),這是您當前匹配的。
RewriteRule ^contact-us contact-us.php [L,NC]
您還應該在正則運算式中包含字串結尾錨點,否則這些規則也會匹配重寫的 URL 并導致不必要的回圈。例如:
RewriteRule ^contact-us$ contact-us.php [L,NC]
我也會質疑這里標志的使用,因為它可能會通過允許和(以及之間的所有內容)訪問相同的資源來NC創建重復的內容問題。contact-usCONTACT-US
概括
換句話說,你的規則應該更像這樣:
RewriteRule ^contact-us$ contact-us.php [L]
RewriteRule ^login$ login.php [L]
RewriteRule ^register$ register.php [L]
RewriteRule ^search$ search.php [L]
RewriteRule ^about-us$ about-us.php [L]
RewriteRule ^cats$ categories.php [L]
RewriteRule ^(\d )/([\w-] )$ detail.php?q=$1&slug=$2 [L]
RewriteRule ^subcat/(\d )/([\w-] )$ subcat.php?q=$1&slug=$2 [L]
RewriteRule ^profile/(\d )/([\w-] )$ show_profile.php?q=$1&slug=$2 [L]
(\w是 . 的簡寫字符類[a-zA-Z0-9_]。)
通過使正則運算式更具體,您可以避免沖突。指令從上到下執行。第一條匹配的規則獲勝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/467176.html
