我在重寫URL時遇到了一些實際問題,任何幫助都將受到大力讚賞。使用舊的.htaccess規則重寫網址
我有一個名爲share.php
一個PHP文件,幷包含以下規則.htaccess文件:
RewriteRule ^share/([^/\.]+)/?$ share.php?variable=$1&%{QUERY_STRING} [L]
如果我瀏覽到domain.com/share/123456
,該share.php
頁面加載,但在$_GET['variable']
沒有價值。 我在.htaccess文件中有一些其他的重寫規則,我認爲他們可能有問題,所以我刪除了所有其他規則。其中一個我刪除規則是rewriting domain.com/preview
到domain.com/preview.php
RewriteRule ^preview/?$ preview.php?&%{QUERY_STRING} [L]
然後我注意到,即使所有的刪除了其他規則,如果我導航到domain.com/preview,它仍然會重寫URL進行預覽。 PHP。
因此,我完全刪除了.htaccess文件,重新啓動了Apache,清除了Firefox中的緩存並再次進行了測試。即使.htaccess文件已被刪除,規則仍然有效。 domain.com/preview
仍然重定向到domain.com/preview.php
和domain.com/share/123456
仍然重定向到domain.com/share.php
(在$_GET['variable']
中沒有數據)。
2個域指向服務器,但在任何.conf文件中都沒有重寫規則,並且不再有任何.htaccess文件。我曾嘗試將重寫規則放入域的.conf文件中,但我遇到同樣的問題。
如果我運行phpinfo()
,Modrewrite會顯示爲加載模塊。下面是我的域名.conf文件:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /home/www/domain.com/public_html
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all denied
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
我一直在試圖整個下午排序了這一點,我看不出有什麼不對!任何人都可以將我指向正確的方向嗎?
對於從哪裏開始進行故障排除,我確實感到茫然。我打開了重寫日誌記錄,但沒有出現在日誌文件中。
我在使用PHP 5.5.10的Ubuntu 12.04上運行Apache 2.4.9。
首先,代替使用'&%{QUERY_STRING}'只需將[L]更改爲[L,QSA],並且apache將追加查詢字符串,然後在正則表達式中使用點。你是指'^ share /([^ /] +)/?$'而不是'^ share /([^/\.]+)/?$'?如果只有共享的數值,你也可以做'^ share /([0-9] +)/?$' – Bor691