[英]How is this URL being mapped in Apache?
我已經接管了一個舊開發人員剛剛消失的項目,而我的第一個自我分配任務是能夠在EC2主機上復制整個堆棧。
在原來的原始主機上,我可以訪問一個URL,即http://www.example.com/users/login/ (我可以加上斜杠,並且可以正常登錄到登錄頁面)。
查看/var/www/[example.com]/中的源代碼-我可以找到一個看起來像是從中渲染HTML頁面的section / users / login.php。
我的輔助EC2主機中有相同的代碼,但是我不費心使用虛擬主機,我只是將其放在/ var / www / html /中(而不是/var/www/[example.com]/ ),但我得到了404。
我應該在哪里尋找將http://www.example.com/users/login/指向/sections/users/login.php的映射?
我對RewriteRule的東西不是很熟悉,但是在倉庫和httpd.conf中只有2個.htaccess文件,我在任何地方都看不到與“ sections”有關的內容,所以我不確定在哪里查找。
我的根目錄中的.htaccess是:
php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_value memory_limit 1024M
php_value max_input_time 1800
php_value max_execution_time 1900
php_value session.gc_maxlifetime 7200
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)example.mobi [NC]
RewriteRule ^(.*)$ http://%1example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(.*)example.us [NC]
RewriteRule ^(.*)$ http://%1example.com/$1 [R=301,L]
RewriteBase /
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteRule ^(.*)\.vcf vcf.php [L]
RewriteRule ^shared/(.*)$ /$1 [L,NC,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Options -Indexes
首先,您可以粘貼htaccess文件的內容,以便我們可以看到您已有的規則。 我相信你應該有這樣的東西
RewriteRule ^([^\.]+)$ $1.php [NC,L]
此外,某些托管服務提供商(包括我所知的AWS EC2)將要求在apache配置中啟用MultiViews。
您還可以檢查.htaccess文件是否已解析和使用(可以啟用重寫調試級別,也可以僅在.htaccess文件中添加一些偽代碼,然后等待錯誤:)。 如果apache未加載您的.htaccess文件,請檢查AllowOverride和Require設置(您應該具有AllowOverride All和Require All Granted)。
在這種情況下,似乎RewriteRule正在將所有請求重寫到index.php文件。 這在框架中很常見,但是您無需框架即可完成。 在index.php文件中,它正在解析查詢字符串並將其重新映射到適當的PHP文件。
應該注意的是,只有在請求中找不到匹配的文件或目錄時,它才會重寫為index.php文件-這是此規則的作用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.