我正在处理网站的网址。我想将以下网址转换为
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 =]我想用[/]斜杠替换
答案 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我会很感激。