使用htaccess清理URL。没有收到查询字符串变量

时间:2014-01-22 18:30:57

标签: php .htaccess mod-rewrite

我正在处理网站的网址。我想将以下网址转换为

http://dev.steelogic.com/solution.php?id=metalbuildingproduct

此网址

http://dev.steelogic.com/solution/metalbuildingproduct

这是我正在使用的htaccess代码。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/(.+)$    $1.php?id=$2

我对htaccess一无所知。通常我只是复制粘贴文本,它的工作原理。 带有?id =的网址工作正常 但是当尝试使用第二个网址时,它没有任何ID。 我必须对许多其他页面执行此操作,并且所有包含[.php?id =]我想用[/]斜杠替换

4 个答案:

答案 0 :(得分:1)

DocumentRoot/.htaccess

中试用此规则
Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+)/([^/]+)/?$ /$1.php?id=$2 [L,QSA]

答案 1 :(得分:0)

请试试这个:

<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteBase /
RewriteRule ^solution/([^/.]+)/?$ solution.php?id=$1 [PT,L,NC,QSA]
</IfModule>

答案 2 :(得分:0)

因为您说即使没有此规则,转到http://example.com/solution/asdf在您的服务器上加载/solution.php,其他内容也必须在您的网址上运行。因为你说你没有定义这样的规则,它必须来自其他地方。要么在其他地方定义规则(主配置文件),要么启用MultiViews。如果您无法应用anubhava的解决方案(禁用MultiViews),请将文件移动到其他位置,例如在/public/solution.php下,以便url永远不会与现有文件部分匹配,然后使用以下规则。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/public/$1.php -f #partly copied from anubhava's answer
RewriteRule ^([^/]+)/([^/]+)/?$ /public/$1.php?id=$2 [L]

答案 3 :(得分:0)

从所有的讨论中我得出结论,用.htaccess很难做到这一点,因为可能有某种模块在托管网站的网址上工作,我得到solution和{{1定向到同一页面 所以我现在在php中做到了。 作为以下两个页面 http://dev.steelogic.com/solution.php?id=metalbuildingproduct

http://dev.steelogic.com/solution/metalbuildingproduct

进入相同的页面,但使用第二个网址我没有得到查询字符串var。所以我写了一个PHP代码,因为我在每个页面上都知道我需要多少变量,所以它对我有用。虽然它可能不是一个好方法但它有效

solution.php

如果有任何身体可以帮助我.htaccess我会很感激。