【发布时间】:2016-06-19 19:36:51
【问题描述】:
我想知道 SO 社区的精彩世界是否可以帮助我解决这个问题。
我想在.htaccess 文件中重定向/重写以下 URL。
1。重定向
我正在尝试 301 重定向此 URL:
http://example.com/staff-view.php?i=ACCOUNT_ID_EXAMPLE
到
http://example.com/staff-view/ACCOUNT_ID_EXAMPLE/
我尝试了以下方法:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+staff-view\.php\?i=([^\s]+) [NC]
RewriteRule ^ /staff-view/%1/? [R=301,L]
但是,当导航到来自 URL 时,它不会重定向。
2。 PHP 查询字符串
我正在使用下面的重写:
RewriteRule ^staff-view/([^/]+)/?$ /staff-view.php?i=$1 [L,QSA,NC]
通过 URL 访问
http://example.com/staff-view/ACCOUNT_ID_EXAMPLE/
它正确地将我引导到正确的页面,但是当尝试通过以下方法访问 ACCOUNT_ID_EXAMPLE 时:
<?
var_dump($_REQUEST);
var_dump($_GET);
?>
它们都是空的:
array(0) { } array(0) { }
非常感谢您的帮助,如果您需要更多信息,请告诉我。
更新 1
更新.htaccess文件:
RewriteEngine On
RewriteRule ^staff/([^/]+)/?$ /staff-view.php?i=$1 [L,QSA,NC]
RewriteBase "/"
RewriteCond %{REQUEST_URI} ^staff-view\.php$
RewriteCond %{QUERY_STRING} ^i=([A-Z0-9_]*)$
RewriteRule ^(.*)$ ^staff/%1/
我已尝试从以下位置访问文件:
http://example.com/path/to/site/staff/ACCOUNT_ID
它不起作用。但是,如果我从以下位置访问文件:
http://example2.com/staff/ACCOUNT_ID
它工作。
但是如果我转到http://example2.com/staff-view.php?i=ACCOUNT_ID,它不会重定向到http://example2.com/staff/ACCOUNT_ID - 这不是世界末日,但我想修复它,但优先考虑深层目录问题:)。
【问题讨论】:
-
您的
RewriteRule都有L标志,这意味着停止处理。此外,它们看起来是循环的(一个重定向到另一个,另一个重定向到另一个)。这可能是问题的一部分吗?如果您将staff-view.php重命名为其他名称并将路径staff-view/id/重定向到它,事情会更好吗?然后当我请求staff-view.php?id=1时,我将被定向到staff-view/1/(带有R=301),然后到new-file.php?id=1(静默)?
标签: php apache .htaccess mod-rewrite query-string